热门标签 | HotTags
当前位置:  开发笔记 > IOS > 正文

从`deinit`中走私`self`

如何解决《从`deinit`中走私`self`》经验,求大佬解答?

如果我通过将其分配给一些外部强引用而走私self了我会发生什么deinit?下面的代码显然格式不正确:

class C: CustomStringConvertible {
    let s = "abc"

    var description: String {
        return "C(id: \(ObjectIdentifier(self)), s: \(s))"
    }

    deinit {
        print("deinit")
        globalObject = self
    }
}

var globalObject: C!

do {
    let localObject = C()
    print("localObject: \(localObject)")
    print("end of `do`")
}

print("globalObject: \(globalObject!)")

您不能仅仅从a的中间“改变主意”来取消对象的初始化deinit。但有趣的是,此代码是不确定的,有时偶尔会成功完成,并打印:

localObject: C(id: ObjectIdentifier(0x00007f9063f00960), s: abc)
end of `do`
deinit
globalObject: C(id: ObjectIdentifier(0x00007f9063f00960), s: abc)

我正在使用Code Runner运行此程序,后者仅使用运行单个文件Swift脚本swiftc。因此,这里没有任何Playground拥有的意外参考。

不确定性从何而来?


推荐阅读
author-avatar
晓辉19890424俱乐部
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有